package com.my.springboot.tuling.concurrent;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * CyclicBarrier是java并法包中的一个同步工具类，用于控制多个线程之间的同步。它允许一组线程 相互等待，直到全部线程达到某个屏障点，然后才能继续执行。
 * CyclicBarrier的构造方法接受两个参数：要等待的线程数量和屏障动作（可选）。在所有线程都调用了await()方法后，就会触发屏障动作，然后所有线程会被释放并继续执行。
 */
public class CyclicBarrierTest {

    public static void main(String[] args) {
        int threadCount = 3;
        CyclicBarrier cyclicBarrier = new CyclicBarrier(threadCount,() -> {
            System.out.println("所有线程都已达到屏障点");
        });

        for (int i = 0; i < threadCount; i++){
            Thread thread = new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + " 到达屏障点");
                try {
                    cyclicBarrier.await();
                } catch (InterruptedException | BrokenBarrierException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + " 开始执行");
            });
            thread.start();
        }
    }
}
